/*
 * @Author: zhaiyujia
 * @Date: 2022-11-24 02:36:58
 * @LastEditors: zhaiyujia
 * @LastEditTime: 2022-11-24 02:36:58
 * @Description: file content
 */

#include "Arduino.h"

void led_send(uint8_t *colors)
{
    uint8_t i, j;
    uint8_t temp;
    for (j = 0; j < 3; j++)
    {
        temp = colors[j];
        i = 8;
        while (i)
        {
            if (temp & 0x80) // 从高位开始发送
            {
                LED_REG = 1; // 发送“1”码
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                temp = (temp << 1); // 左移位
                i--;
                LED_REG = 0;
            }
            else // 发送“0”码
            {
                LED_REG = 1;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                LED_REG = 0;
                _nop_();
                temp = (temp << 1); // 左移位
                i--;
            }
        }
    }
}
// 复位灯珠设置
void led_reset(void)
{
    uint8_t i, j;
    _nop_();
    i = 2;
    j = 140;
    do
    {
        while (--j)
            ;
    } while (--i);
}
// colors 颜色表，count 需要点亮的灯珠数
void led_show(uint8_t *colors, uint8_t count)
{
    uint8_t i;
    uint8_t black[3] = {0};
    led_reset();
    for (i = 0; i < LED_NUM; i++)
    {
        if (i < count)
            led_send(&colors[(3 * i)]);
        else
            led_send(&black);
    }
    led_reset(); // 发送帧复位信号
}
